<?php
/**
 * Created by PhpStorm.
 * User: 69548
 * Date: 2018/9/26
 * Time: 10:44
 */

namespace app\wap\controller;


class Gdimg{

    private $src;
    private $image;
    private $imageinfo;
    private $percent = 0.5;
    private $url;

    /**
     * 图片压缩
     * @param $src 源图
     * @param float $percent  压缩比例
     */
    public function __construct($src='', $percent=0.7)
    {
////        $this->src = $src;
//        $this->src = $_SERVER['DOCUMENT_ROOT'].'/uploads/admin/admin_thumb/20180920/59d9f81548c5a3230658c8adc8e6ee4f.jpg';
        $this->percent = $percent;
    }


    public function index(){
//        $source = './uploads/admin/admin_thumb/20180920/59d9f81548c5a3230658c8adc8e6ee4f.jpg';//原图片名称
//        $dst_img = 'text.png';//压缩后图片的名称
//        $percent = 1; //原图压缩，不缩放，但体积大大降低
        $goods=  db('goods')
//          ->alias('a')
//          ->join('attachment b','a.thumb=b.id')
//          ->field('b.id,b.filepath')
//          ->where('goods_id',2)
//          ->where('show',1)
            ->select();
        foreach ($goods as $v){
            if (preg_match('/http/',$v['goods_image'])){
                continue;
            }else{
                $image=!empty($v['goods_image'])?explode(',',$v['goods_image']):'';
                $this->url='';
                if (!empty($image[1])){
                    $image= array_filter($image);
                    foreach ($image as $u){
                        $this->src=$_SERVER['DOCUMENT_ROOT'].$u;
                        $name=md5($u);
                        $this->compressImg1($name);
                    }
                }
            }

            db('goods')->where('goods_id',$v['goods_id'])->update([
                'small_image'=>$this->url
            ]);
//            dump();
            dump($this->url);
        }


    }

    public function index2(){
//        $source = './uploads/admin/admin_thumb/20180920/59d9f81548c5a3230658c8adc8e6ee4f.jpg';//原图片名称
//        $dst_img = 'text.png';//压缩后图片的名称
//        $percent = 1; //原图压缩，不缩放，但体积大大降低
        $goods=  db('article')
            ->alias('a')
            ->join('attachment b','a.thumb=b.id')
            ->field('b.id,b.filepath')
//          ->where('goods_id',2)
//          ->where('show',1)
            ->select();
        foreach ($goods as $v){
//            if (preg_match('/http/',$v['goods_image'])){
//                continue;
//            }else{
//                $image=!empty($v['goods_image'])?explode(',',$v['goods_image']):'';
            $this->url='';
//                if (!empty($image[1])){
//                    $image= array_filter($image);
//                    foreach ($image as $u){
            $this->src=$_SERVER['DOCUMENT_ROOT'].$v['filepath'];
            $name=md5($v['filepath']);
            $this->compressImg1($name);
//                    }
//                }
//            }

            db('attachment')->where('id',$v['id'])->update([
                'small_image'=>$this->url
            ]);
//            dump();
            dump($this->url);
        }


    }


    /** 高清压缩图片
     * @param string $saveName  提供图片名（可不带扩展名，用源图扩展名）用于保存。或不提供文件名直接显示
     */
    public function compressImg($saveName='',$src)
    {
        $this->url='';

        if(substr($src,0,4)=='http'){
            $this->src=$src;
        }else{
            $this->src=$_SERVER['DOCUMENT_ROOT'].$src;
        }

        $this->_openImage();
//        if(!empty($saveName))
//        if (!empty($goods)){
        $this->_saveImage($saveName);  //保存
//        }else{
//            $this->_saveImage1($saveName);  //保存
//        }

        return $this->url;
//        else $this->_showImage();
    }
    public function compressImg1($saveName='')
    {
//        $this->url='';
        $this->_openImage();
//        if(!empty($saveName))
        $this->_saveImage1($saveName);  //保存
//        return $this->url;
//        else $this->_showImage();
    }
    /**
     * 内部：打开图片
     */
    private function _openImage()
    {

        list($width, $height, $type, $attr) = getimagesize( $this->src);
        $this->imageinfo = array(
            'width'=>$width,
            'height'=>$height,
            'type'=>image_type_to_extension($type,false),
            'attr'=>$attr
        );
        $fun = "imagecreatefrom".$this->imageinfo['type'];

//        $txt='KBX';
        $this->image = $fun($this->src);
//      $col=  imagecolorallocatealpha( $this->image ,241,7,7,20);
//      imagefttext($this->image,50,0,30,80,$col,'JM.ttf',$txt);
//        var_dump($this->imageinfo);
//        echo  $this->imageinfo;die;

        $this->_thumpImage();
    }
    /**
     * 内部：操作图片
     */
    private function _thumpImage()
    {
        $new_width = $this->imageinfo['width'] * $this->percent;
        $new_height = $this->imageinfo['height'] * $this->percent;
        $image_thump = imagecreatetruecolor($new_width,$new_height);
        //将原图复制带图片载体上面，并且按照一定比例压缩,极大的保持了清晰度
        imagecopyresampled($image_thump,$this->image,0,0,0,0,$new_width,$new_height,$this->imageinfo['width'],$this->imageinfo['height']);
        imagedestroy($this->image);
        $this->image = $image_thump;
    }
    /**
     * 输出图片:保存图片则用saveImage()
     */
    private function _showImage()
    {
        header('Content-Type: image/'.$this->imageinfo['type']);
        $funcs = "image".$this->imageinfo['type'];
        $funcs($this->image);
    }
    /**
     * 保存图片到硬盘：
     * @param  string $dstImgName  1、可指定字符串不带后缀的名称，使用源图扩展名 。2、直接指定目标图片名带扩展名。
     */

    private function _saveImage1($dstImgName='')
    {
        if(empty($dstImgName)) return false;
        $allowImgs = ['.jpg', '.jpeg', '.png', '.bmp', '.wbmp','.gif'];   //如果目标图片名有后缀就用目标图片扩展名 后缀，如果没有，则用源图的扩展名
        $dstExt =  strrchr($dstImgName ,".");
        $sourseExt = strrchr($this->src ,".");
        if(!empty($dstExt)) $dstExt =strtolower($dstExt);
        if(!empty($sourseExt)) $sourseExt =strtolower($sourseExt);

        //有指定目标名扩展名
        if(!empty($dstExt) && in_array($dstExt,$allowImgs)){
            $dstName = $dstImgName;
        }elseif(!empty($sourseExt) && in_array($sourseExt,$allowImgs)){
            $dstName = $dstImgName.$sourseExt;
        }else{
            $dstName = $dstImgName.$this->imageinfo['type'];
        }
        if ($this->imageinfo['type']=='png'){
            $funcs = "image".$this->imageinfo['type'];
            $funcs($this->image,$dstName,9);
        }else{
            $funcs = "image".$this->imageinfo['type'];
            $funcs($this->image,$dstName,100);
        }

        $path='./uploads/goods/';
//        rmdir($path);
//        $ro=mkdir($path,'777');
//        if ()
//        $d=rename('./'.$dstName,'./uploads/');
        $d= copy('./'.$dstName,$path.$dstName);
//     $d=rename('./1234.jpg','./uploads/12/');
        if ($d){
            unlink('./'.$dstName);
            $this->url.='/uploads/goods/'.$dstName;
//         echo $d;
        }else{
            echo '移动失败';
        }

        imagedestroy($this->image);
    }

    private function _saveImage($dstImgName='')
    {
        if(empty($dstImgName)) return false;
        $allowImgs = ['.jpg', '.jpeg', '.png', '.bmp', '.wbmp','.gif'];   //如果目标图片名有后缀就用目标图片扩展名 后缀，如果没有，则用源图的扩展名
        $dstExt =  strrchr($dstImgName ,".");
        $sourseExt = strrchr($this->src ,".");
        if(!empty($dstExt)) $dstExt =strtolower($dstExt);
        if(!empty($sourseExt)) $sourseExt =strtolower($sourseExt);

        //有指定目标名扩展名
        if(!empty($dstExt) && in_array($dstExt,$allowImgs)){
            $dstName = $dstImgName;
        }elseif(!empty($sourseExt) && in_array($sourseExt,$allowImgs)){
            $dstName = $dstImgName.$sourseExt;
        }else{
            $dstName = $dstImgName.$this->imageinfo['type'];
        }

        if ($this->imageinfo['type']=='png'){
            $funcs = "image".$this->imageinfo['type'];
            $funcs($this->image,$dstName,9);
        }else{
            $funcs = "image".$this->imageinfo['type'];
            $funcs($this->image,$dstName,100);
        }
//        $funcs = "image".$this->imageinfo['type'];
//        $funcs($this->image,$dstName,90);
//        imagejpeg('','','')
        $path='./uploads/goods/';
//        rmdir($path);
//        $ro=mkdir($path,'777');
//        if ()
//        $d=rename('./'.$dstName,'./uploads/');
        $d= copy('./'.$dstName,$path.$dstName);
//     $d=rename('./1234.jpg','./uploads/12/');
        if ($d){
            unlink('./'.$dstName);
            $this->url.='/uploads/goods/'.$dstName;
//         echo $d;
        }else{
            echo '移动失败';
        }

        imagedestroy($this->image);
    }
    /**
     * 销毁图片
     */
//    public function __destruct(){
//        imagedestroy($this->image);
//    }

}
//phpinfo();die();

//---------------------

//本文来自 现实分享 的CSDN 博客 ，全文地址请点击：https://blog.csdn.net/qq_36608163/article/details/73167284?utm_source=copy